package com.carrental.integration.service;

import java.util.Map;

/**
 * 地图服务接口
 * 提供地理编码、逆地理编码、路径规划和地点检索等功能
 */
public interface MapService {

    /**
     * 地理编码，将地址信息转换为经纬度坐标
     *
     * @param address 地址信息
     * @return 包含经纬度坐标的Map对象
     */
    Map<String, Object> geocoding(String address);

    /**
     * 逆地理编码，将经纬度坐标转换为地址信息
     *
     * @param latitude 纬度
     * @param longitude 经度
     * @return 包含地址信息的Map对象
     */
    Map<String, Object> reverseGeocoding(double latitude, double longitude);

    /**
     * 路径规划，计算两点间的驾车路线
     *
     * @param originLat 起点纬度
     * @param originLng 起点经度
     * @param destLat 终点纬度
     * @param destLng 终点经度
     * @return 包含路径规划结果的Map对象
     */
    Map<String, Object> drivingDirection(double originLat, double originLng, double destLat, double destLng);

    /**
     * 地点检索，根据关键字检索地点
     *
     * @param keyword 检索关键字
     * @param region 检索区域
     * @return 包含地点检索结果的Map对象
     */
    Map<String, Object> placeSearch(String keyword, String region);

    /**
     * 计算两点间的距离
     *
     * @param originLat 起点纬度
     * @param originLng 起点经度
     * @param destLat 终点纬度
     * @param destLng 终点经度
     * @return 两点间的距离，单位为米
     */
    double calculateDistance(double originLat, double originLng, double destLat, double destLng);

    /**
     * 计算两点间的驾车时间
     *
     * @param originLat 起点纬度
     * @param originLng 起点经度
     * @param destLat 终点纬度
     * @param destLng 终点经度
     * @return 两点间的驾车时间，单位为秒
     */
    int calculateDrivingTime(double originLat, double originLng, double destLat, double destLng);
} 